home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / hplip / base / wifi.pyc (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2009-10-28  |  18.3 KB  |  613 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import time
  5. import cStringIO
  6. import xml.parsers.expat as xml
  7. from base.g import *
  8. from base import device, utils
  9. MAX_NETWORKS = 100
  10. MAX_RETRIES = 20
  11. NS = 'http://www.hp.com/schemas/imaging/cnc/dcsl/2006/05/WifiConfig'
  12. PREAMBLE = '<?xml version="1.0" encoding="utf-8"?>\n<WiFiConfig xmlns="%s">\n' % NS
  13.  
  14. def _readWriteWifiConfig(dev, request):
  15.     if not request:
  16.         log.error('Invalid request')
  17.         return ('executionfailed', { })
  18.     log.debug('Sending request on wifi config channel...')
  19.     log.log_data(request)
  20.     bytes_written = dev.writeWifiConfig(request)
  21.     log.debug('Wrote %d bytes.' % bytes_written)
  22.     data = cStringIO.StringIO()
  23.     log.debug('Reading response on wifi config channel...')
  24.     bytesread = dev.readWifiConfig(device.MAX_BUFFER, stream = data, timeout = 30)
  25.     i = 0
  26.     while True:
  27.         i += 1
  28.         bytesread = dev.readWifiConfig(device.MAX_BUFFER, stream = data, timeout = 1)
  29.         if not bytesread or i > MAX_RETRIES:
  30.             break
  31.             continue
  32.         request
  33.     data = data.getvalue()
  34.     data = utils.unescape(data)
  35.     data = unicode(data, 'utf-8')
  36.     data = data.replace(u'Devicecapabilities', u'DeviceCapabilities').replace('\x00', '')
  37.     log.log_data(data)
  38.     log.debug('Read %d bytes.' % len(data))
  39.     if not data:
  40.         log.error('No data')
  41.         return ('executionfailed', { })
  42.     
  43.     try:
  44.         params = utils.XMLToDictParser().parseXML(data)
  45.     except xml.parsers.expat.ExpatError:
  46.         data
  47.         e = data
  48.         log.error('XML parser failed: %s' % e)
  49.         match = re.search('line\\s*(\\d+).*?column\\s*(\\d+)', str(e), re.I)
  50.         if match is not None:
  51.             log.error(data[int(match.group(2)):])
  52.         
  53.         return ('executionfailed', { })
  54.  
  55.     errorreturn = 'executionfailed'
  56.     for p in params:
  57.         if p.lower().endswith('errorreturn'):
  58.             errorreturn = params[p].lower()
  59.             break
  60.             continue
  61.         data
  62.     
  63.     params['errorreturn'] = errorreturn
  64.     return (errorreturn, params)
  65.  
  66.  
  67. def getDeviceCapabilities(dev):
  68.     ret = { }
  69.     request = PREAMBLE + '<GetDeviceCapabilitiesRequest>\n</GetDeviceCapabilitiesRequest>\n</WiFiConfig>'
  70.     (errorreturn, params) = _readWriteWifiConfig(dev, request)
  71.     if not params:
  72.         return { }
  73.     ret['errorreturn'] = errorreturn
  74.     if errorreturn != 'ok':
  75.         log.error('GetDeviceCapabilities returned an error: %s' % errorreturn)
  76.         return ret
  77.     param_keys = [
  78.         'wificonfig-getdevicecapabilitiesresponse-devicecapabilities-numberofsupportedwifiaccessories',
  79.         'wificonfig-getdevicecapabilitiesresponse-interfaceversion-minorreleasenumber',
  80.         'wificonfig-getdevicecapabilitiesresponse-interfaceversion-majorreleasenumber']
  81.     for p in param_keys:
  82.         
  83.         try:
  84.             ret[p.split('-')[-1]] = params[p]
  85.         continue
  86.         except KeyError:
  87.             errorreturn != 'ok'
  88.             errorreturn != 'ok'
  89.             params
  90.             log.debug('Missing response key: %s' % p)
  91.             continue
  92.             continue
  93.         
  94.  
  95.     
  96.     return ret
  97.  
  98.  
  99. def getAdaptorList(dev):
  100.     ret = { }
  101.     request = PREAMBLE + '<GetAdaptorListRequest>\n</GetAdaptorListRequest>\n</WiFiConfig>'
  102.     (errorreturn, params) = _readWriteWifiConfig(dev, request)
  103.     if not params:
  104.         return {
  105.             'adaptorlistlength': 0 }
  106.     ret['errorreturn'] = errorreturn
  107.     if errorreturn != 'ok':
  108.         log.error('GetAdaptorList returned an error: %s' % errorreturn)
  109.         return ret
  110.     
  111.     try:
  112.         adaptor_list_length = int(params['wificonfig-getadaptorlistresponse-adaptorlistlength'])
  113.     except (ValueError, KeyError):
  114.         errorreturn != 'ok'
  115.         errorreturn != 'ok'
  116.         params
  117.         adaptor_list_length = 0
  118.     except:
  119.         errorreturn != 'ok'
  120.  
  121.     ret['adaptorlistlength'] = adaptor_list_length
  122.     if adaptor_list_length == 0:
  123.         log.error('GetAdaptorList returned 0 adaptors')
  124.     elif adaptor_list_length == 1:
  125.         
  126.         try:
  127.             ret['adaptorid-0'] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorid']
  128.             ret['adaptorname-0'] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorname']
  129.             ret['adaptorpresence-0'] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorpresence']
  130.             ret['adaptorstate-0'] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorstate']
  131.             ret['adaptortype-0'] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptortype']
  132.         except KeyError:
  133.             params
  134.             e = params
  135.             log.debug('Missing response key: %s' % e)
  136.         except:
  137.             params<EXCEPTION MATCH>KeyError
  138.         
  139.  
  140.     params
  141.     for a in xrange(adaptor_list_length):
  142.         
  143.         try:
  144.             ret['adaptorid-%d' % a] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorid-%d' % a]
  145.             ret['adaptorname-%d' % a] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorname-%d' % a]
  146.             ret['adaptorpresence-%d' % a] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorpresence-%d' % a]
  147.             ret['adaptorstate-%d' % a] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorstate-%d' % a]
  148.             ret['adaptortype-%d' % a] = params['wificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptortype-%d' % a]
  149.         continue
  150.         except KeyError:
  151.             params
  152.             e = params
  153.             log.debug('Missing response key: %s' % e)
  154.             continue
  155.         
  156.  
  157.     
  158.     return ret
  159.  
  160.  
  161. def getWifiAdaptorID(dev):
  162.     ret = getAdaptorList(dev)
  163.     
  164.     try:
  165.         num_adaptors = ret['adaptorlistlength']
  166.     except KeyError:
  167.         num_adaptors = 0
  168.  
  169.     for n in xrange(num_adaptors):
  170.         
  171.         try:
  172.             name = ret['adaptortype-%d' % n]
  173.         except KeyError:
  174.             name = ''
  175.  
  176.         if name.lower() in ('wifiembedded', 'wifiaccessory'):
  177.             params = [
  178.                 'adaptorid',
  179.                 'adaptorname',
  180.                 'adaptorstate',
  181.                 'adaptorpresence']
  182.             r = []
  183.             for p in params:
  184.                 
  185.                 try:
  186.                     x = ret[''.join([
  187.                         p,
  188.                         '-',
  189.                         str(n)])]
  190.                 except KeyError:
  191.                     if p == 'adaptorid':
  192.                         x = -1
  193.                     else:
  194.                         x = 'Unknown'
  195.                 except:
  196.                     p == 'adaptorid'
  197.  
  198.                 r.append(x)
  199.             
  200.             return r
  201.     
  202.     return (-1, 'Unknown', 'Unknown', 'Unknown')
  203.  
  204.  
  205. def setAdaptorPower(dev, adaptor_id = 0, power_state = 'PowerOn'):
  206.     ret = { }
  207.     request = PREAMBLE + '<SetAdaptorPowerRequest>\n<AdaptorID>%s</AdaptorID>\n<PowerState>%s</PowerState>\n</SetAdaptorPowerRequest>\n</WiFiConfig>' % (adaptor_id, power_state.encode('utf-8'))
  208.     (errorreturn, params) = _readWriteWifiConfig(dev, request)
  209.     if not params:
  210.         return { }
  211.     ret['errorreturn'] = errorreturn
  212.     if errorreturn != 'ok':
  213.         log.error('SetAdaptorPower returned an error: %s' % errorreturn)
  214.         return ret
  215.     return ret
  216.  
  217.  
  218. def performScan(dev, ssid = None):
  219.     ret = { }
  220.     i = 0
  221.     scan_state = 'NewScan'
  222.     while True:
  223.         if ssid is None:
  224.             request = PREAMBLE + '<UndirectedScanRequest>\n<ScanState>%s</ScanState>\n</UndirectedScanRequest>\n</WiFiConfig>' % scan_state
  225.             typ = 'UndirectedScan'
  226.             rsp = 'undirectedscanresponse'
  227.         else:
  228.             request = PREAMBLE + '<DirectedScanRequest>\n<SSID>%s</SSID>\n<ScanState>%s</ScanState>\n</DirectedScanRequest>\n</WiFiConfig>' % (ssid.encode('utf-8'), scan_state)
  229.             typ = 'Directed'
  230.             rsp = 'directedscanresponse'
  231.         (errorreturn, params) = _readWriteWifiConfig(dev, request)
  232.         if not params:
  233.             return {
  234.                 'numberofscanentries': 0 }
  235.         ret['errorreturn'] = errorreturn
  236.         if errorreturn != 'ok':
  237.             log.error('%s returned an error: %s' % (typ, errorreturn))
  238.             return ret
  239.         
  240.         try:
  241.             number_of_scan_entries = int(params['wificonfig-%s-numberofscanentries' % rsp])
  242.         except (ValueError, KeyError):
  243.             errorreturn != 'ok'
  244.             errorreturn != 'ok'
  245.             params
  246.             number_of_scan_entries = 0
  247.         except:
  248.             errorreturn != 'ok'
  249.  
  250.         ret['numberofscanentries'] = number_of_scan_entries
  251.         if number_of_scan_entries == 0:
  252.             if scan_state.lower() == 'scancomplete':
  253.                 log.debug('%s returned 0 entries. Scan complete.' % typ)
  254.             else:
  255.                 log.debug('%s returned 0 entries. Resuming scan...' % typ)
  256.         elif number_of_scan_entries == 1:
  257.             
  258.             try:
  259.                 ssid = params['wificonfig-%s-scanlist-scanentry-ssid' % rsp]
  260.                 if not ssid:
  261.                     ret['ssid-0'] = u'(unknown)'
  262.                 else:
  263.                     ret['ssid-0'] = ssid
  264.                 ret['bssid-0'] = params['wificonfig-%s-scanlist-scanentry-bssid' % rsp]
  265.                 ret['channel-0'] = params['wificonfig-%s-scanlist-scanentry-channel' % rsp]
  266.                 ret['communicationmode-0'] = params['wificonfig-%s-scanlist-scanentry-communicationmode' % rsp]
  267.                 ret['dbm-0'] = params['wificonfig-%s-scanlist-scanentry-dbm' % rsp]
  268.                 ret['encryptiontype-0'] = params['wificonfig-%s-scanlist-scanentry-encryptiontype' % rsp]
  269.                 ret['rank-0'] = params['wificonfig-%s-scanlist-scanentry-rank' % rsp]
  270.                 ret['signalstrength-0'] = params['wificonfig-%s-scanlist-scanentry-signalstrength' % rsp]
  271.             except KeyError:
  272.                 params
  273.                 e = params
  274.                 log.debug('Missing response key: %s' % e)
  275.             except:
  276.                 params<EXCEPTION MATCH>KeyError
  277.             
  278.  
  279.         params
  280.         for a in xrange(number_of_scan_entries):
  281.             j = a + i
  282.             
  283.             try:
  284.                 ssid = params['wificonfig-%s-scanlist-scanentry-ssid-%d' % (rsp, j)]
  285.                 if not ssid:
  286.                     ret['ssid-%d' % j] = u'(unknown)'
  287.                 else:
  288.                     ret['ssid-%d' % j] = ssid
  289.                 ret['bssid-%d' % j] = params['wificonfig-%s-scanlist-scanentry-bssid-%d' % (rsp, j)]
  290.                 ret['channel-%d' % j] = params['wificonfig-%s-scanlist-scanentry-channel-%d' % (rsp, j)]
  291.                 ret['communicationmode-%d' % j] = params['wificonfig-%s-scanlist-scanentry-communicationmode-%d' % (rsp, j)]
  292.                 ret['dbm-%d' % j] = params['wificonfig-%s-scanlist-scanentry-dbm-%d' % (rsp, j)]
  293.                 ret['encryptiontype-%d' % j] = params['wificonfig-%s-scanlist-scanentry-encryptiontype-%d' % (rsp, j)]
  294.                 ret['rank-%d' % j] = params['wificonfig-%s-scanlist-scanentry-rank-%d' % (rsp, j)]
  295.                 ret['signalstrength-%d' % j] = params['wificonfig-%s-scanlist-scanentry-signalstrength-%d' % (rsp, j)]
  296.             continue
  297.             except KeyError:
  298.                 params
  299.                 e = params
  300.                 log.debug('Missing response key: %s' % e)
  301.                 continue
  302.             
  303.  
  304.         
  305.         
  306.         try:
  307.             ret['signalstrengthmax'] = params['wificonfig-%s-scansettings-signalstrengthmax' % rsp]
  308.             ret['signalstrengthmin'] = params['wificonfig-%s-scansettings-signalstrengthmin' % rsp]
  309.         except KeyError:
  310.             params<EXCEPTION MATCH>KeyError
  311.             e = params<EXCEPTION MATCH>KeyError
  312.             params
  313.             log.debug('Missing response key: %s' % e)
  314.         except:
  315.             params
  316.  
  317.         if scan_state.lower() == 'scancomplete':
  318.             break
  319.         
  320.         scan_state = 'ResumeScan'
  321.         i += number_of_scan_entries
  322.         if i > MAX_NETWORKS:
  323.             break
  324.         
  325.         time.sleep(2)
  326.     return ret
  327.  
  328.  
  329. def associate(dev, ssid, communication_mode, encryption_type, key):
  330.     ret = { }
  331.     request = PREAMBLE + '<AssociateRequest>\n<SSID>%s</SSID>\n<CommunicationMode>%s</CommunicationMode>\n<EncryptionType>%s</EncryptionType>\n<EncryptedParameters>%s</EncryptedParameters>\n<Key>%s</Key>\n</AssociateRequest>\n</WiFiConfig>' % (ssid.encode('utf-8'), communication_mode.encode('utf-8'), encryption_type.encode('utf-8'), u'False'.encode('utf-8'), key.encode('utf-8'))
  332.     (errorreturn, params) = _readWriteWifiConfig(dev, request)
  333.     if not params:
  334.         return { }
  335.     ret['errorreturn'] = errorreturn
  336.     if errorreturn != 'ok':
  337.         log.error('Associate returned an error: %s' % errorreturn)
  338.         return ret
  339.     return ret
  340.  
  341.  
  342. def getVSACodes(dev):
  343.     ret = []
  344.     request = PREAMBLE + '<GetVSACodesRequest>\n</GetVSACodesRequest>\n</WiFiConfig>'
  345.     (errorreturn, params) = _readWriteWifiConfig(dev, request)
  346.     if not params:
  347.         return []
  348.     if errorreturn != 'ok':
  349.         log.error('GetVSACodes returned an error: %s' % errorreturn)
  350.         return ret
  351.     
  352.     try:
  353.         rule = params['wificonfig-getvsacodesresponse-vsacodelist-vsacode-rulenumber']
  354.         severity = params['wificonfig-getvsacodesresponse-vsacodelist-vsacode-severity']
  355.     except KeyError:
  356.         errorreturn != 'ok'
  357.         errorreturn != 'ok'
  358.         params
  359.         n = 0
  360.         while True:
  361.             
  362.             try:
  363.                 rule = params['wificonfig-getvsacodesresponse-vsacodelist-vsacode-rulenumber-%d' % n]
  364.             except KeyError:
  365.                 break
  366.  
  367.             severity = params['wificonfig-getvsacodesresponse-vsacodelist-vsacode-severity-%d' % n]
  368.             ret.append((rule, severity))
  369.             n += 1
  370.     except:
  371.         errorreturn != 'ok'
  372.  
  373.     ret.append((rule, severity))
  374.     return ret
  375.  
  376.  
  377. def __getIPConfiguration(dev, adaptor_id = 0):
  378.     ret = { }
  379.     request = PREAMBLE + '<GetIPConfigurationRequest>\n<AdaptorID>%d</AdaptorID>\n</GetIPConfigurationRequest>\n</WiFiConfig>' % adaptor_id
  380.     (errorreturn, params) = _readWriteWifiConfig(dev, request)
  381.     if not params:
  382.         return { }
  383.     ret['errorreturn'] = errorreturn
  384.     if errorreturn != 'ok':
  385.         log.error('GetIPConfiguration returned an error: %s' % errorreturn)
  386.         return ret
  387.     param_keys = [
  388.         'wificonfig-getipconfigurationresponse-ipconfiguration-addressmode',
  389.         'wificonfig-getipconfigurationresponse-ipconfiguration-alternatednsaddress',
  390.         'wificonfig-getipconfigurationresponse-ipconfiguration-gatewayaddress',
  391.         'wificonfig-getipconfigurationresponse-ipconfiguration-ipaddress',
  392.         'wificonfig-getipconfigurationresponse-ipconfiguration-primarydnsaddress',
  393.         'wificonfig-getipconfigurationresponse-ipconfiguration-subnetmask',
  394.         'wificonfig-getipconfigurationresponse-networkconfiguration-hostname']
  395.     for p in param_keys:
  396.         
  397.         try:
  398.             ret[p.split('-')[-1]] = params[p]
  399.         continue
  400.         except KeyError:
  401.             errorreturn != 'ok'
  402.             errorreturn != 'ok'
  403.             params
  404.             log.debug('Missing response key: %s' % p)
  405.             continue
  406.             continue
  407.         
  408.  
  409.     
  410.     return ret
  411.  
  412.  
  413. def getIPConfiguration(dev, adaptor_id = 0):
  414.     (ip, hostname, addressmode, subnetmask, gateway, pridns, sec_dns) = ('0.0.0.0', 'Unknown', 'Unknown', '0.0.0.0', '0.0.0.0', '0.0.0.0', '0.0.0.0')
  415.     ret = __getIPConfiguration(dev, adaptor_id)
  416.     if ret and ret['errorreturn'].lower() == 'ok':
  417.         
  418.         try:
  419.             ip = ret['ipaddress']
  420.             hostname = ret['hostname']
  421.             addressmode = ret['addressmode']
  422.             subnetmask = ret['subnetmask']
  423.             gateway = ret['gatewayaddress']
  424.             pridns = ret['primarydnsaddress']
  425.             sec_dns = ret['alternatednsaddress']
  426.         except KeyError:
  427.             e = None
  428.             log.debug('Missing response key: %s' % str(e))
  429.         except:
  430.             None<EXCEPTION MATCH>KeyError
  431.         
  432.  
  433.     None<EXCEPTION MATCH>KeyError
  434.     return (ip, hostname, addressmode, subnetmask, gateway, pridns, sec_dns)
  435.  
  436.  
  437. def __getSignalStrength(dev, adaptor_id = 0):
  438.     ret = { }
  439.     request = PREAMBLE + '<GetSignalStrengthRequest>\n<AdaptorID>%d</AdaptorID>\n</GetSignalStrengthRequest>\n</WiFiConfig>' % adaptor_id
  440.     (errorreturn, params) = _readWriteWifiConfig(dev, request)
  441.     if not params:
  442.         return { }
  443.     ret['errorreturn'] = errorreturn
  444.     if errorreturn != 'ok':
  445.         log.error('GetSignalStrength returned an error: %s' % errorreturn)
  446.         return ret
  447.     param_keys = [
  448.         'wificonfig-getsignalstrengthresponse-signalstrength-dbm',
  449.         'wificonfig-getsignalstrengthresponse-signalstrength-signalstrengthmax',
  450.         'wificonfig-getsignalstrengthresponse-signalstrength-signalstrengthmin',
  451.         'wificonfig-getsignalstrengthresponse-signalstrength-signalstrengthvalue']
  452.     for p in param_keys:
  453.         
  454.         try:
  455.             ret[p.split('-')[-1]] = params[p]
  456.         continue
  457.         except KeyError:
  458.             errorreturn != 'ok'
  459.             errorreturn != 'ok'
  460.             params
  461.             log.debug('Missing response key: %s' % p)
  462.             continue
  463.             continue
  464.         
  465.  
  466.     
  467.     return ret
  468.  
  469.  
  470. def getSignalStrength(dev, adaptor_id = 0):
  471.     (ss_max, ss_min, ss_val, ss_dbm) = (5, 0, 0, -200)
  472.     ret = __getSignalStrength(dev, adaptor_id)
  473.     if ret and ret['errorreturn'].lower() == 'ok':
  474.         
  475.         try:
  476.             ss_max = ret['signalstrengthmax']
  477.             ss_min = ret['signalstrengthmin']
  478.             ss_val = ret['signalstrengthvalue']
  479.             ss_dbm = ret['dbm']
  480.         except KeyError:
  481.             e = None
  482.             log.debug('Missing response key: %s' % str(e))
  483.         except:
  484.             None<EXCEPTION MATCH>KeyError
  485.         
  486.  
  487.     None<EXCEPTION MATCH>KeyError
  488.     return (ss_max, ss_min, ss_val, ss_dbm)
  489.  
  490.  
  491. def __getCryptoSuite(dev):
  492.     ret = { }
  493.     request = PREAMBLE + '<GetCryptoSuiteRequest>\n</GetCryptoSuiteRequest>\n</WiFiConfig>'
  494.     (errorreturn, params) = _readWriteWifiConfig(dev, request)
  495.     if not params:
  496.         return { }
  497.     ret['errorreturn'] = errorreturn
  498.     if errorreturn != 'ok':
  499.         log.error('GetSignalStrength returned an error: %s' % errorreturn)
  500.         return ret
  501.     param_keys = [
  502.         'wificonfig-getcryptosuiteresponse-cryposuite-crypoalgorithm',
  503.         'wificonfig-getcryptosuiteresponse-cryposuite-crypomode',
  504.         'wificonfig-getcryptosuiteresponse-cryposuite-secretid']
  505.     for p in param_keys:
  506.         
  507.         try:
  508.             ret[p.split('-')[-1]] = params[p]
  509.         continue
  510.         except KeyError:
  511.             errorreturn != 'ok'
  512.             errorreturn != 'ok'
  513.             params
  514.             log.debug('Missing response key: %s' % p)
  515.             continue
  516.             continue
  517.         
  518.  
  519.     
  520.     return ret
  521.  
  522.  
  523. def getCryptoSuite(dev):
  524.     (alg, mode, secretid) = ('', '', '')
  525.     ret = __getCryptoSuite(dev)
  526.     if ret and ret['errorreturn'].lower() == 'ok':
  527.         
  528.         try:
  529.             alg = ret['crypoalgorithm']
  530.             mode = ret['crypomode']
  531.             secretid = ret['secretid']
  532.         except KeyError:
  533.             e = None
  534.             log.debug('Missing response key: %s' % str(e))
  535.         except:
  536.             None<EXCEPTION MATCH>KeyError
  537.         
  538.  
  539.     None<EXCEPTION MATCH>KeyError
  540.     return (alg, mode, secretid)
  541.  
  542.  
  543. def getHostname(dev):
  544.     ret = ''
  545.     request = PREAMBLE + '<GetHostnameRequest>\n</GetHostnameRequest>\n</WiFiConfig>'
  546.     (errorreturn, params) = _readWriteWifiConfig(dev, request)
  547.     if not params:
  548.         return ret
  549.     if errorreturn != 'ok':
  550.         log.error('GetHostname returned an error: %s' % errorreturn)
  551.         return ret
  552.     
  553.     try:
  554.         ret = params['wificonfig-gethostnameresponse-hostname']
  555.     except KeyError:
  556.         errorreturn != 'ok'
  557.         errorreturn != 'ok'
  558.         params
  559.         log.debug('Missing response key: hostname')
  560.     except:
  561.         errorreturn != 'ok'
  562.  
  563.     return ret
  564.  
  565.  
  566. def getLocation(bssid, ss):
  567.     log.debug('Getting location for wifi AP: %s' % bssid)
  568.     request = "<?xml version='1.0'?>\n<LocationRQ xmlns='http://skyhookwireless.com/wps/2005' version='2.6' street-address-lookup='full'>\n<authentication version='2.0'>\n<simple>\n<username>beta</username>\n<realm>js.loki.com</realm>\n</simple>\n</authentication>\n<access-point>\n<mac>%s</mac>\n<signal-strength>%d</signal-strength>\n</access-point>\n</LocationRQ>" % (bssid.encode('utf-8'), ss)
  569.     import httplib
  570.     import socket
  571.     ret = { }
  572.     request_len = len(request)
  573.     log.log_data(request)
  574.     
  575.     try:
  576.         conn = httplib.HTTPSConnection('api.skyhookwireless.com')
  577.         conn.putrequest('POST', '/wps2/location')
  578.         conn.putheader('Content-type', 'text/xml')
  579.         conn.putheader('Content-Length', str(request_len))
  580.         conn.endheaders()
  581.         conn.send(request)
  582.     except (socket.gaierror, socket.error):
  583.         log.debug('Host connection error')
  584.         return { }
  585.  
  586.     response = conn.getresponse()
  587.     if response.status != 200:
  588.         log.debug('Connection to location server failed')
  589.         return { }
  590.     xml = response.read()
  591.     log.log_data(xml)
  592.     
  593.     try:
  594.         params = utils.XMLToDictParser().parseXML(xml)
  595.     except xml.parsers.expat.ExpatError:
  596.         response.status != 200
  597.         response.status != 200
  598.         return { }
  599.  
  600.     if 'locationrs-error' in params:
  601.         log.debug('Location server returned failure')
  602.         return { }
  603.     ret['latitude'] = params.get('locationrs-location-latitude', 0)
  604.     ret['longitude'] = params.get('locationrs-location-longitude', 0)
  605.     street_number = params.get('locationrs-location-street-address-street-number', '')
  606.     street_name = params.get('locationrs-location-street-address-address-line', '')
  607.     city = params.get('locationrs-location-street-address-city', '')
  608.     country = params.get('locationrs-location-street-address-country-code', '')
  609.     address = '%s %s, %s, %s' % (street_number, street_name, city, country)
  610.     ret['address'] = address.strip()
  611.     return ret
  612.  
  613.